package util

import "fmt"

/*
*
多路 channel 监听-select

ch1 := make(chan string)
ch2 := make(chan string)
....................
// 监听多个 channel，执行最先就绪的 case
select {
case msg1 := <-ch1:

	fmt.Println(msg1)

case msg2 := <-ch2:

		fmt.Println(msg2)
	}
*/
func resale(ch chan int, deal func(v int)) {
	// 阻塞，直到有人发送
	i := <-ch
	fmt.Println(i)
	deal(i)
}

/*
*
select 的关键特性
1、随机选择：当多个 case 同时就绪时，随机选择一个执行
2、阻塞等待：没有 default 时，会阻塞直到某个 case 就绪
3、一次性执行：每次 select 只执行一个 case
*/
func send(ch chan int, data []int) {
	for i := range data {
		ch <- i
	}
	// 通道关闭后不能再发送，但可以接收剩余数据
	close(ch)
}
